# author: LiuShihao
# data: 2020/11/28 2:54 下午
# youknow: 各位老铁,我的这套代码曾经有人出价三个亿我没有卖,如今拿出来和大家分享,不求别的,只求大家免费的小红心帮忙点一点,这里谢过了。
# desc: 类的特殊方法
a = 10
b = 20
c = a+b          # a+b底层实际上是调用了__add__()方法
d = a.__add__(b)  # __add__()方法
print(c)
print(d)
class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __add__(self, other):
            return self.name+other.name
    def __len__(self):
        return len(self.name)
stu1 = Student('zs',19)
stu2 = Student('ls',22)
s = stu1+stu2    # 如果类中没有定义__add__特殊方法，直接使用+，则无法实现两个对象的相加   会报错
print(s)
s = stu1.__add__(stu2)
print(s)
lst = [11,22,33,44,55,]
print(len(lst))
print(lst.__len__())
print(s.__len__())

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("__init__方法被调用了,self的id值为{0}".format(id(self)))
    def __new__(cls, *args, **kwargs):
        print("__new__方法被调用了，cls的id值为{0}".format(id(cls)))
        obj = super().__new__(cls)
        print("创建的对象的id是{0}".format(id(obj)))
        return obj
print("object这个类对象的id为{0}".format(id(object)))
print("Person这个类对象的id为{0}".format(id(Person)))
# 创建Person的实例对象
p1 = Person('zs',18)
print("p1这个Person类的实例对象的id为{}".format(id(p1)))
# 通过以上可以发现  在new中创建出的对象就是self和p1
"""
在我们进行实例化对象的时候  例如：Person('zs',18)
 首先执行的是Person类中的__new__ 方法 
 然后是__init__方法
"""